package cn.design.clone;

/**
 * @author dlq
 * @description 浅克隆： 对于要克隆的对象, 类对象中 的属性
 *                     1. 基本类型，复制一份新的值,不和原来对象指向相同的地址,重新开辟一个地址
 *                     2. 引用类型,仅仅复制一份引用给新产生的对象，新产生的对象和原来的对象都指向相同的地址,使用共同的属性
 * @date 2020/9/14 13:50
 * @since 1.0
 */
public class ShallowCloneDemo {
    public static void main(String[] args) {
        //浅拷贝

        User user = new User();
        user.setId(1);
        user.setName("aaa");
        user.setStudent(new Student(999, "student"));
        User userClone = (User) user.clone();

        System.out.println("初始化User: " + user);
        System.out.println("克隆User: " + userClone);

        System.out.println(user.getStudent() == userClone.getStudent());//true

        System.out.println("修改值======================");

        //将基本类型值进行修改
        user.setId(55);
        //讲引用类型的值进行修改
        user.getStudent().setId(1000);

        System.out.println("初始化User修改值后: " + user);//User{id=55, name='aaa', student=Student{id=1000, name='student'}}
        //注意 User中的id，和student中的id
        System.out.println("克隆User(User修改值后): " + userClone);//User{id=1, name='aaa', student=Student{id=1000, name='student'}}

    }
}
